#include <iostream>	
#include <string>
#include <memory>
#include "LOG.hpp"
#include "threadpool.hpp"	
#include "Task.hpp"	
#include<ctime>
// int main()
// {
//     // 获取单例的可能是多线程啊！！！
//     // 程序已经加载
//     LOG(DEBUG, "程序已经加载");
//     sleep(3);
//     ThreadPool<Task>::GetInstance();
//     sleep(2);

//     ThreadPool<Task>::GetInstance();
//     sleep(2);

//     ThreadPool<Task>::GetInstance();
//     sleep(2);

//     ThreadPool<Task>::GetInstance();
//     sleep(2);

//     ThreadPool<Task>::GetInstance()->Wait();
//     sleep(2);

//     return 0;
// }


// int main()
// {
// 	LOG(DEBUG, "hello %d, %s, %f, %d", 10, "world", 3.14, 10);
//     LOG(INFO, "hello world, %d", 10);
//     LOG(INFO, "hello world");
// 	return 0;
// }
   
        
int main()
{
	srand(time(nullptr) ^ getpid() ^ pthread_self());
	std::unique_ptr<ThreadPool<Task>> tp(new ThreadPool<Task>(5)); 
	tp->InitThreadPool();
	tp->Start();
	
	int tasknum=3;
	while(tasknum)
	{
		int a = rand() % 12 + 1;
		usleep(1000);
		int b = rand() % 4 + 1;
		Task t(a, b);
		LOG(INFO, "主线程推送任务: %s", t.DebugToString().c_str());
		tp->Enqueue(t);
		sleep(1);
		tasknum--;
	}

	tp->Stop();
    tp->Wait();
    return 0;
}